麻豆文化传媒精品一区观看,精品日韩欧美一区二区在线播放,久久人人玩人妻潮喷内射人人,亚洲日韩成人无码不卡

for 知乎鏈接圖標抓取
Redis的應用場景
2022-12-29 2830 作者:
字號:【小】【中】【大】
分享到:

先介紹一下Redis

簡介:REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的 key-value存儲系統(tǒng),是跨平臺的非關系型數(shù)據(jù)庫。

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡、可基于內(nèi)存、分布式、可選持久性的鍵值對(Key-Value)存儲數(shù)據(jù)庫,并提供多種語言的API。

Redis通常被稱為數(shù)據(jù)結構服務器,因為值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型。

優(yōu)勢

1:速度快,因為數(shù)據(jù)存在于內(nèi)存中,類似hashmap的優(yōu)勢就是查找和操作的時間復雜度都是o(1)

2:支持豐富的數(shù)據(jù)類型,string、list、hash、set、zset

3:支持事務,操作都是原子性的。

4:豐富的特性:可用于緩存、消息,按key設置過期時間,過期自動刪除

應用場景

1、緩存

可以使用String類型

例如:熱點數(shù)據(jù)緩存(例如報表、熱銷商品),對象緩存、全頁緩存、可以提升熱點數(shù)據(jù)的訪問數(shù)據(jù)。

image1.png

2、數(shù)據(jù)共享分布式

String 類型,因為 Redis 是分布式的獨立服務,可以在多個應用之間共享

例如:分布式Session需要引入此依賴

image2.png

3、分布式鎖

String 類型setnx方法,只有不存在時才能添加成功,返回true

image3.png

將key 的值設為value ,當且僅當key不存在。

若給定的 key已經(jīng)存在,則SETNX不做任何動作。

4、全局ID

int類型,incrby,利用原子性

image4.png

如果是分庫分表的場景,一次性拿一段。

5、計數(shù)器

int類型,incr方法

例如:文章的閱讀量、微博點贊數(shù)、允許一定的延遲,先寫入Redis再定時同步到數(shù)據(jù)庫

image5.png

6、限流

基于redis的數(shù)據(jù)結構zset

zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定后,zset會自動重新按新的值調整順序。可以對指定鍵的值進行排序權重的設定,它應用排名模塊比較多。

我們可以將請求打造成一個zset數(shù)組,當每一次請求進來的時候,value保持唯一,可以用UUID生成,而score可以用當前時間戳表示,因為score我們可以用來計算當前時間戳之內(nèi)有多少的請求數(shù)量。而zset數(shù)據(jù)結構也提供了range方法讓我們可以很輕易的獲取到2個時間戳內(nèi)有多少請求。

image6.png

7、位統(tǒng)計

String類型的bitcount(1.6.6的bitmap數(shù)據(jù)結構介紹)

image7.png

字符是以8位二進制存儲的

例如:在線用戶統(tǒng)計,留存用戶統(tǒng)計,支持按位與、按位或等等操作,計算出7天都在線的用戶。

8、購物車

傳統(tǒng)的購物車實現(xiàn)有很多種方式,如session,cookie,數(shù)據(jù)庫等,如果用Redis相當于一個內(nèi)存數(shù)據(jù)庫,可以用來做緩存,存儲數(shù)據(jù)等。

類型用String 或hash。所有String可以做的hash都可以做。

image8.png

9、用戶消息時間線

list,雙向鏈表,直接作為timeline就好了。插入有序。

10、消息隊列

List提供了兩個阻塞的彈出操作:blpop/brpop,可以設置超時時間。

blpop:blpop key1 timeout 移除并獲取列表的第一個元素,如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。

brpop:brpop key1 timeout 移除并獲取列表的最后一個元素,如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。

上面的操作。其實就是java的阻塞隊列。學習的東西越多。學習成本越低。

隊列:先進先除:rpush blpop,左頭右尾,右邊進入隊列,左邊出隊列。

棧:先進后出:rpush brpop。

11、抽獎

移除并返回集合中的一個隨機元素。

image9.png

返回集合中一個或多個隨機數(shù)。

image10.png

將所有的獎品通過SADD添加到SET集合中,然后通過隨機命令獲取對應的獎品即可。而且,抽獎一般是有時效性,正好可以配合redis的key的失效時間使用。使得抽獎功能很完美的解決。

12、點贊、簽到、打卡

假如上面的微博ID是t1001,用戶ID是u3001

用 like:t1001 來維護 t1001 這條微博的所有點贊用戶

點贊了這條微博:sadd like:t1001 u3001

取消點贊:srem like:t1001 u3001

是否點贊:sismember like:t1001 u3001

點贊的所有用戶:smembers like:t1001

點贊數(shù):scard like:t1001

相對于數(shù)據(jù)庫簡單很多

13、商品標簽

使用tags:來給對象打標簽,然后可以直接查找出來。

image11.png

14、商品篩選

一個集合進行查找

image12.png

多個集合進行運算是按照順序,一路算下去的結果

SDIFF計算差集   

SINTER 計算并集

SUNION 計算交集

15、用戶關注、推薦模型

實際上就是redis的交集,并集差集的使用交錯

舉例:

image13.png

16、排行榜

實現(xiàn)這個功能主要用到的 redis 數(shù)據(jù)類型是 redis 的有序集合 zset。zset 是 set 類型的一個擴展,比原有的類型多了一個順序屬性。此屬性在每次插入數(shù)據(jù)時會自動調整順序值,保證 value 值按照一定順序連續(xù)排列。

image14.png

查看用戶 e 的實際排名 (ZREVRANK 為降序,ZRANK 為升序)、實時分數(shù)。


最新標簽
最新更新
我要試用
驗證碼
獎勵領取
驗證碼
關注或聯(lián)系我們

微信公眾號

業(yè)務咨詢:400-9969-069(24小時服務) 028-86052918
售后熱線:028-86052836
公司地址:成都市武侯區(qū)天益街38號理想中心3棟1810

在線客服
Copyright? 2022天健世紀. All Rights Reserved. 蜀ICP備16016808號
for 知乎鏈接圖標抓取
×
快速定制通道
獲取驗證碼
快速咨詢